package com.norma.macaron.common.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

/**
 * <p style="color:blue"> 获取指定时间格式</p>
 *
 * @author YYF
 *
 */
public class FormatDateUtil {

    /**
     * 获取指定的时间格式:yyyy-mm-dd
     *
     * @return
     */
    public static String getDateFormatYMD() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
        return format.format(date);

    }
    /**
     * 获取指定的时间格式:yyyy-mm-dd
     *
     * @return
     */
    public static String getDateFormatChinaYMD() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日");
        Date date = new Date();
        return format.format(date);

    }
    /**
     * 获取指定的时间格式:yyyy-MM-dd HH:mm:ss
     *
     * @return
     */
    public static String getDateFormatYMDHMS() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date();
        return format.format(date);

    }

    /**
     * 时间戳:yyyyMMdd
     *
     * @return
     */
    public  static String getTimestamp() {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
        Date date = new Date();
        return format.format(date);

    }
    /**
     * 时间戳:yyyyMMddHHmmss
     *
     * @return
     */
    public  static String getTimestampFull() {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = new Date();
        return format.format(date);

    }

    /**
     * 自定义样式时间
     *
     * @return
     */
    public static String getUserDateFormat(String style) {
        SimpleDateFormat format = new SimpleDateFormat(style);
        Date date = new Date();
        return format.format(date);

    }

    /**
     * 中国样式的时间
     *
     * @return
     */
    public static String getChinesStyleTime() {
        DateFormat df = DateFormat.getDateInstance(DateFormat.LONG,
                Locale.CHINA);// GERMANY
        return df.format(new Date());
    }
    /**
     * 获取多少个月以前的时间
     * @return
     */
    public static String getProphaseMouthTime(int month) {
        Date  date=new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//格式化对象
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.add(Calendar.MONTH, -month); // 得到前N个月
        return sdf.format(calendar.getTime());
    }
    
    /*
     * @param String 转yyyy-MM-dd格式的时间. 
     * @return 
     */  
    public static Date dateFormatString(String dateStr) {  
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");  
        Date date = null;  
        try {  
            date = format.parse(dateStr);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return date;  
    }  
    
    /*
     * @param String 转yyyy-MM-dd HH:mm:ss格式的时间. 
     * @return 
     */  
    public static Date date2FormatString(String dateStr) {  
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
        Date date = null;  
        try {  
            date = format.parse(dateStr);  
        } catch (Exception e) {
            e.printStackTrace();  
        }  
        return date;  
    }  
    
    //------------------------------------------------------
    
    /**
     * 日期转换成短字符串
     * @param date 
     * @return str
     */
     public static String DateToShortStr(Date date) {
       
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String str = format.format(date);
        return str;
     } 
     
    /**
    * 日期转换成长字符串
    * @param date 
    * @return str
    */
    public static String DateToLongStr(Date date) {
      
       SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       String str = format.format(date);
       return str;
    } 

    /**
    * 字符串转换成短日期
    * @param str
    * @return date
    */
    public static Date StrToShortDate(String str) {
      
       SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
       Date date = null;
       try {
        date = format.parse(str);
       } catch (Exception e) {
        e.printStackTrace();
       }
       return date;
    }
    
    /**
     * 字符串转换成长日期
     * @param str
     * @return date
     */
     public static Date StrToLongDate(String str) {
       
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
         date = format.parse(str);
        } catch (Exception e) {
         e.printStackTrace();
        }
        return date;
     }
     
     /**
      * 
      * @author YYF
      * @date 2015年5月20日 上午11:24:56
      * @version 版本号码:
      * @description 描述:获取N天之前的时间
      *
      * @param num
      * @return
      */
     public static String NumDaysAgoTime(int num) {
    	 Calendar cal = Calendar.getInstance();
    	 cal.add(Calendar.DATE, -num);
    	 String yesterday = new SimpleDateFormat( "yyyy-MM-dd ").format(cal.getTime());  //昨天日期
		 return yesterday;
      }



     /**
     *
     * @author YYF
     * @date 2015年5月20日 上午11:24:56
     * @version 版本号码:
     * @description 描述:获取N天之前的时间
     *
     * @param num
     * @return
     */
    public static String NumDaysAgoLongTime(int num) {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -num);
        String yesterday = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss").format(cal.getTime());  //昨天日期
        return yesterday;
    }


    /**
     * 计算2个时间差(date1-date2)
     * @param date1
     * @param date2
     * @return
     */
    public static String getDateDiff(Date date1,Date date2){
        long long1 = date1.getTime();
        long long2 = date2.getTime();
        long long_diff = long1-long2;
        long day = long_diff/(1000*60);
        return day+"";

    }
    
    public static int daysBetween(Date smdate,Date bdate) throws ParseException 
    {    
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
        smdate=sdf.parse(sdf.format(smdate));  
        bdate=sdf.parse(sdf.format(bdate));  
        Calendar cal = Calendar.getInstance();    
        cal.setTime(smdate);    
        long time1 = cal.getTimeInMillis();                 
        cal.setTime(bdate);    
        long time2 = cal.getTimeInMillis();         
        long between_days=(time2-time1)/(1000*3600*24);  
            
       return Integer.parseInt(String.valueOf(between_days));           
    }    
    
	public static int yearDateDiff(String startDate, String endDate) {
		Calendar calBegin = Calendar.getInstance(); // 获取日历实例
		Calendar calEnd = Calendar.getInstance();
		calBegin.setTime(stringTodate(startDate, "yyyy")); // 字符串按照指定格式转化为日期
		calEnd.setTime(stringTodate(endDate, "yyyy"));
		return calEnd.get(Calendar.YEAR) - calBegin.get(Calendar.YEAR);
	}
	
	//字符串按照指定格式转化为日期  
	 public static Date stringTodate(String dateStr, String formatStr) {  
	    // 如果时间为空则默认当前时间  
	    Date date = null;  
	    SimpleDateFormat format = new SimpleDateFormat(formatStr);  
	    if (dateStr != null && !dateStr.equals("")) {    
	 String time = "";  
	 try {  
	    Date dateTwo = format.parse(dateStr);  
	    time = format.format(dateTwo);  
	    date = format.parse(time);  
	} catch (ParseException e) {  
	    e.printStackTrace();  
	       }  
	  
	    } else {
	  String timeTwo = format.format(new Date());
	  try {  
	    date = format.parse(timeTwo);  
	  } catch (ParseException e) {  
	    e.printStackTrace();  
	  }  
	   }  
	   return date;  
	}

	//毫秒串转换日期类
     public static Date currentToDate(Long time){
           SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
           String dateStr = dateformat.format(time);
           return StrToLongDate(dateStr);
     }
}


